package com.settlement.system.mapper;

import com.settlement.system.model.entity.common.TblNcVurcherDetailPlus;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * NC凭证明细_优化 Mapper 接口
 * @author xiaochuan
 * @since 2021-01-20
 */
public interface TblNcVurcherDetailPlusMapper extends BaseMapper {

    /**
     * 获取合计
     *
     * @param params 请求参数
     * @return
     */
    public TblNcVurcherDetailPlus getFoot(@Param("params") Map<String, Object> params);

    /**
     * 获取推出NC的数据
     * @param params 请求参数
     * @return 凭证明细列表
     */
    List<TblNcVurcherDetailPlus> findPushNcByParam(@Param("params") Map<String, Object> params);
    /**
     * 根据业务单号更新
     * @param vurcherDetail 凭证明细
     */
    void updateByOrderNo(TblNcVurcherDetailPlus vurcherDetail);

    /**
     * 把返回的凭证号回写到费用分摊表
     * @param ncVoucherNo
     * @param serialNo
     */
    void updateNcVoucherNoBySerialNo(@Param("ncVoucherNo") String ncVoucherNo,@Param("serialNo") String serialNo);

    void updateAccountStatusOfCostAllocationBySerialNo(@Param("serialNo") String serialNo,
                                     @Param("toAccountStatus") String toAccountStatus,
                                     @Param("accountFailDesc") String accountFailDesc
    );

    void updateAccountStatusOfUnificationSummaryBySerialNo(@Param("serialNo") String serialNo,
                                                       @Param("toAccountStatus") String toAccountStatus,
                                                       @Param("accountFailDesc") String accountFailDesc
    );

    /**
     * 批量更新
     * @param list 凭证明细列表
     */
    void batchUpdateById(@Param("list")List<TblNcVurcherDetailPlus> list);
    /**
     * 根据流水号更新
     * @param detailPlus 凭证明细
     */
    void updateBySerialNo(TblNcVurcherDetailPlus detailPlus);

    /**
     * 更新和NC凭证明细相关联的统一账单汇总的记账状态
     */
    void updateAccountStatusOfSummary(
            @Param("fromAccountStatus") String fromAccountStatus,
            @Param("toAccountStatus") String toAccountStatus,
            @Param("params") Map<String, Object> params);

    void updateAccountStatusOfCostShare(
            @Param("fromAccountStatus") String fromAccountStatus,
            @Param("toAccountStatus") String toAccountStatus,
            @Param("params") Map<String, Object> params);


    void revokeNcVurcher(@Param("params") Map<String, Object> params);

    List<Integer> selectAccountStatus(@Param("params") Map<String, Object> params);
}

